package com.zyl.blog.tasks.schedule.container;

import com.zyl.blog.tasks.schedule.abstracts.AbstractScheduledTask;
import org.springframework.scheduling.TaskScheduler;

import java.util.List;
import java.util.Map;
import java.util.concurrent.ScheduledFuture;

/**
 * 任务容器接口，用于管理所有定时任务
 * @version v1.0
 * @ProjectName: Personal_Blog_Server
 * @Package: com.zyl.blog.tasks.schedule.container
 * @ClassName: TaskContainer
 * @Author FinalFantasy
 * @Date 2025/8/12-10:16
 */
public interface TaskContainer {

    /**
     * 添加任务到容器
     */
    void addTask(AbstractScheduledTask task);

    /**
     * 从容器中移除任务
     */
    void removeTask(String taskName, String username);

    /**
     * 获取指定任务
     */
    AbstractScheduledTask getTask(String taskName, String username);

    /**
     * 获取用户的所有任务
     */
    List<AbstractScheduledTask> getUserTasks(String username);

    /**
     * 获取所有任务
     * 结构：Map<用户名, Map<任务名, 任务对象>>
     */
    Map<String, Map<String, AbstractScheduledTask>> getAllTasks();

    /**
     * 存储正在执行的任务
     */
    void storeRunningTask(String taskName, String username, ScheduledFuture<?> scheduledFuture);

    /**
     * 获取正在执行的任务
     */
    ScheduledFuture<?> getRunningTask(String taskName, String username);

    /**
     * 移除正在执行的任务
     */
    void removeRunningTask(String taskName, String username);

    // ==================== 新增方法 ====================

    /**
     * 获取定时任务
     */
    ScheduledFuture<?> getScheduledTask(String taskName, String username);

    /**
     * 移除定时任务
     */
    void removeScheduledTask(String taskName, String username);

    /**
     * 添加定时任务
     */
    void addScheduledTask(String taskName, String username, ScheduledFuture<?> scheduledFuture);

    /**
     * 判断任务是否正在运行
     */
    boolean isTaskRunning(String taskName, String username);

    /**
     * 获取用户正在运行的任务
     */
    List<AbstractScheduledTask> getUserRunningTasks(String username);

    /**
     * 获取任务调度器实例
     * @return 配置好的TaskScheduler
     */
    TaskScheduler getTaskScheduler();
}
